package ctr.eleve;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import jdbc.Connexion;
import metier.Eleve;
import metier.Grade;
import metier.Stage;
import metier.jdbc.EleveJdbc;
import vue.MenuControle;
import vue.eleve.JPanAjoutEleve;
import configuration.Constante;
import configuration.MessageAppli;
import ctr.util.DateUtil;

public class GestAjoutEleve implements ActionListener{

	private JPanAjoutEleve jPanAjoutEleve;
	
	public GestAjoutEleve(JPanAjoutEleve jPanAjoutEleve) {
		this.jPanAjoutEleve = jPanAjoutEleve;
	}

	/**
	 * Permet d'ajouter un eleve. 
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	@Override
	public void actionPerformed(ActionEvent actionEvent) {
		if (actionEvent.getSource() instanceof JButton) {
			try {
				Grade grade = null;
				Stage stage = null;
				String nom = null;
				String prenom = null;
				
				// Test nom
				JTextField jtextNom = jPanAjoutEleve.getSaisiNomEleve();
				if (!jtextNom.getText().matches(Constante.REGEX_ALPHANUM)) {
					throw new Exception(MessageAppli.MSG_CHAMPS_ALPHANUM);
				}else{
					nom = jtextNom.getText();
				}
				
				// Test prenom
				JTextField jtextPrenom = jPanAjoutEleve.getSaisiPrenomEleve();
				if (!jtextPrenom.getText().matches(Constante.REGEX_ALPHANUM)) {
					throw new Exception(MessageAppli.MSG_CHAMPS_ALPHANUM);
				}else{
					prenom = jtextPrenom.getText();
				}
				
				// Recuperation du Grade
				// Ne peut pas etre null, puisque comboBox. Il y a forcement un grade de séléctionné par défaut.
				if (jPanAjoutEleve.getSaisiGradeEleve().getSelectedItem() != null){
					grade = (Grade) jPanAjoutEleve.getSaisiGradeEleve().getSelectedItem();
				}
				
				// Recuperation du Stage
				// Ne peut pas etre null, puisque comboBox. Il y a forcement un stage de séléctionné par défaut.
				if (jPanAjoutEleve.getSaisiStage().getSelectedItem() != null ){
					stage = (Stage) jPanAjoutEleve.getSaisiStage().getSelectedItem();
				}
				
				// Test Date
				Date date = DateUtil.checkDate(Constante.FORMAT_DATE_SHORT, 
									jPanAjoutEleve.getSaisiDateNaissanceEleve().getText());
				if ( date == null){
					throw new Exception(MessageAppli.MSG_DATE_MAUVAIS_FORMAT + Constante.FORMAT_DATE_SHORT);
				}
				
				// Ajout si tous ok.
				if ( grade != null && stage != null && date != null && !"".equals(nom) && !"".equals(prenom) ){
					
					// Creation eleve temporaire pour le rechercher et eviter les doublons.
					Eleve eleve = new Eleve(null, nom, prenom, date, grade.getIdGrade(), stage.getIdStage(), null);
					if ( !EleveJdbc.eleveExiste(Connexion.getConnexion(), eleve)){
						// Ajout en base.
						if ( !EleveJdbc.ajouter(Connexion.getConnexion(), eleve) ){
							throw new Exception(MessageAppli.MSG_ELEVE_PB_INSERTION);
						}else{
							// Message de confirmation.
							JOptionPane.showMessageDialog(jPanAjoutEleve, MessageAppli.MSG_ELEVE_OK_INSERTION);
						}
					}else{
						throw new Exception(MessageAppli.MSG_ELEVE_DEJA_EXISTANT);
					}
				}else{
					throw new Exception(MessageAppli.MSG_REMPLIR_CHAMPS);
				}
				
				// On reinitialise le panel.
				MenuControle.afficherPan(new JPanAjoutEleve("Afficher eleve"));
			}catch (Exception e) {
				e.printStackTrace();
				JOptionPane.showMessageDialog(jPanAjoutEleve, e.getMessage(), MessageAppli.MSG_TITRE_ERREUR_SAISIE,
								JOptionPane.WARNING_MESSAGE);
			}
		}
	}
}
